// directives/click-prevent.js
export const preventReClick = {
  inserted(el, binding) {
    // 默认配置
    const config = {
      delay: binding.value || 3000, // 延迟时间（毫秒）
      message: binding.arg || '请勿重复操作', // 提示信息
      showToast: binding.modifiers.toast !== undefined, // 是否显示提示
      loading: binding.modifiers.loading !== undefined, // 是否显示加载状态
      loadingText: binding.modifiers.loading ? '处理中...' : '', // 加载状态文本
    };
    
    // 存储原始文本内容
    const originalText = el.textContent;
    let timer = null;
    
    el.addEventListener('click', async function() {
      // 如果按钮已禁用，显示提示并阻止操作
      if (this.disabled) {
        if (config.showToast) {
          uni.showToast({
            title: config.message,
            icon: 'none',
            duration: 1500
          });
        }
        return;
      }
      
      // 禁用按钮
      this.disabled = true;
      
      // 显示加载状态（如果启用）
      if (config.loading) {
        this.textContent = config.loadingText;
      }
      
      // 执行回调函数
      if (typeof binding.expression === 'string' && binding.expression.trim()) {
        const fn = el.__vue__[binding.expression];
        if (typeof fn === 'function') {
          try {
            await fn.call(el.__vue__);
          } catch (error) {
            console.error('点击事件执行失败:', error);
            // 发生错误时提前恢复按钮状态
            this.disabled = false;
            if (config.loading) {
              this.textContent = originalText;
            }
            return;
          }
        }
      }
      
      // 恢复按钮状态
      timer = setTimeout(() => {
        this.disabled = false;
        if (config.loading) {
          this.textContent = originalText;
        }
      }, config.delay);
    });
    
    // 组件销毁时清除定时器
    el.__preventReClickDestroy__ = () => {
      if (timer) {
        clearTimeout(timer);
        timer = null;
      }
    };
  },
  
  unbind(el) {
    if (el.__preventReClickDestroy__) {
      el.__preventReClickDestroy__();
      delete el.__preventReClickDestroy__;
    }
  }
};